package com.xiexiaozhou.helper.core.service;

import com.xiexiaozhou.helper.core.domain.Customer;
import com.xiexiaozhou.helper.core.domain.Order;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 订单
 * create：创建订单，状态：1
 * list：订单列表（分页）
 * listForSelf：客户订单列表（分页）
 * get：通过id获取订单
 * pay：支付订单，状态：2
 * assign：管理员派单，状态：3
 * claim：配送员接单，状态：4
 * confirmByDistributor：配送员确认送达，状态：5
 * confirmByCustomer：客户确认收货，状态：6
 * evaluate：客户评价订单，状态：7
 * delete：删除订单，状态：8
 */
public interface OrderService {

    /**
     * 创建订单，订单状态为1：新订单
     *
     * @param order
     * @param customerId
     * @return
     */
    public Order create(Order order, Long customerId);

    /**
     * 订单列表（分页）
     *
     * @param pageable
     * @return
     */
    public Page<Order> list(Pageable pageable);

    /**
     * 客户订单列表（分页）
     *
     * @param customer
     * @param pageable
     * @return
     */
    public Page<Order> listForSelf(Customer customer, Pageable pageable);

    /**
     * 通过id获取订单信息
     *
     * @param orderId
     * @return
     */
    public Order get(Long orderId);

    /**
     * 支付订单,订单状态改为2：已支付
     *
     * @param orderId
     * @return
     */
    public Order pay(Long orderId);

    /**
     * 管理员指派订单,订单状态改为3：已派单
     *
     * @param orderId    订单id
     * @param assignId   由谁指派(管理员)
     * @param designeeId 指派给谁(配送员)
     * @return
     */
    public Order assign(Long orderId, Long assignId, Long designeeId);

    /**
     * 配送员接单，订单状态改为4：配送中
     *
     * @param orderId
     * @return
     */
    public Order claim(Long orderId);

    /**
     * 由配送员确认订单已送达，订单状态改为5：已送达
     *
     * @param orderId
     * @return
     */
    public Order confirmByDistributor(Long orderId);

    /**
     * 由客户确认订单已收货，订单状态改为6：已收货
     *
     * @param orderId
     * @return
     */
    public Order confirmByCustomer(Long orderId);

    /**
     * 评价订单，订单状态改为7：已评价
     *
     * @param orderId
     * @param evaluateContent
     * @return
     */
    public Order evaluate(Long orderId, String evaluateContent);

    /**
     * 删除订单，订单状态改为：8：已删除
     *
     * @param orderId
     * @return
     */
    public Order delete(Long orderId);

    /**
     * 修改订单
     *
     * @param order
     * @return
     */
    public Order modify(Order order);

    /**
     * 指派给我的订单
     *
     * @param designee
     * @return
     */
    public List<Order> assign(Customer designee);
}
